/**
 * @param {arr: array, pid: number}
 * @return {obj: object}
 */
console.time();
const arr2 = [
    { id: 1, name: '部门1', pid: 0 },
    { id: 2, name: '部门2', pid: 1 },
    { id: 3, name: '部门3', pid: 1 },
    { id: 4, name: '部门4', pid: 3 },
    { id: 5, name: '部门5', pid: 4 },
]

const arr3 = [
    {
        "id": "02",
        "name": "小亮",
        "pid": "01",
        "job": "产品leader"
    },
    {
        "id": "01",
        "name": "张大大",
        "pid": "",
        "job": "项目经理"
    },
    {
        "id": "03",
        "name": "小美",
        "pid": "01",
        "job": "UIleader"
    },
    {
        "id": "04",
        "name": "老马",
        "pid": "01",
        "job": "技术leader"
    },
    {
        "id": "05",
        "name": "老王",
        "pid": "01",
        "job": "测试leader"
    },
    {
        "id": "06",
        "name": "老李",
        "pid": "01",
        "job": "运维leader"
    },
    {
        "id": "07",
        "name": "小丽",
        "pid": "02",
        "job": "产品经理"
    },
    {
        "id": "08",
        "name": "大光",
        "pid": "02",
        "job": "产品经理"
    },
    {
        "id": "09",
        "name": "小高",
        "pid": "03",
        "job": "UI设计师"
    },
    {
        "id": "10",
        "name": "小刘",
        "pid": "04",
        "job": "前端工程师"
    },
    {
        "id": "11",
        "name": "小华",
        "pid": "04",
        "job": "后端工程师"
    },
    {
        "id": "12",
        "name": "小李",
        "pid": "04",
        "job": "后端工程师"
    },
    {
        "id": "13",
        "name": "小赵",
        "pid": "05",
        "job": "测试工程师"
    },
    {
        "id": "14",
        "name": "小强",
        "pid": "05",
        "job": "测试工程师"
    },
    {
        "id": "15",
        "name": "小涛",
        "pid": "06",
        "job": "运维工程师"
    }
]


function fn(arr, pid) {
    const map = new Map(); // 生成map存储元素
    for (const item of arr) {
        if (!map.has(item.id)) { // 若map中没有当前元素，添加并初始化children
            map.set(item.id, { ...item, children: [] });
        } else {
            // 感谢 @[八股文吟诵大师](https://juejin.cn/user/1750078243741591) 指出问题；
            // 若不存在父元素 pid，后续会构造一个空的父元素，就会出现当前元素 item 已经存在的情况；此时需要将当前元素与已存在的元素（创建的父元素）进行合并
            map.set(item.id, { ...map.get(item.id), ...item });
        }
        if (map.has(item.pid)) { // 查找父元素，存在则将该元素插入到children
            map.get(item.pid).children.push(map.get(item.id));
        } else { // 否则初始化父元素，并插入children
            map.set(item.pid, { children: [map.get(item.id)] });
        }
    }
    return map.get(pid);
}
console.log(fn(arr3, 0));
console.log(222);
console.timeEnd()